﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using OpenTK.Graphics.OpenGL;
public class FuenteStroke : IEntidad
{

    private Colores _coloreadoBorde;
    public Colores ColoreadoBorde
    {
        get { return _coloreadoBorde; }
        set { _coloreadoBorde = value; }
    }

    private Estilo.Borde _tipoBorde;
    public Estilo.Borde TipoBorde
    {
        get { return this._tipoBorde; }
        set { this._tipoBorde = value; }
    }

    private Estilo.Forma _tipoForma;
    public Estilo.Forma TipoForma
    {
        get { return this._tipoForma; }
        set { this._tipoForma = value; }
    }

    private string _Tabla;
    public string Tabla
    {
        get { return this._Tabla; }
        set { this._Tabla = value; }
    }


    public enum OPCION_FUENTE
    {
        PT = 1,
        STROKE = 2,
        FIN = 3
    }

    public struct CP
    {
        public float x;
        public float y;
        public OPCION_FUENTE tipo;
        public CP(float Px, float Py, OPCION_FUENTE Ptipo)
        {
            x = Px;
            y = Py;
            tipo = Ptipo;
        }
    }


    protected static CP[] Adata = {
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(0, 9, OPCION_FUENTE.PT),
	    new CP(1, 10, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.PT),
	    new CP(5, 0, OPCION_FUENTE.STROKE),
	    new CP(0, 5, OPCION_FUENTE.PT),
	    new CP(5, 5, OPCION_FUENTE.FIN)

    };
    protected static CP[] Bdata = {
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.PT),
	    new CP(5, 6, OPCION_FUENTE.PT),
	    new CP(4, 5, OPCION_FUENTE.PT),
	    new CP(0, 5, OPCION_FUENTE.STROKE),
	    new CP(4, 5, OPCION_FUENTE.PT),
	    new CP(5, 3, OPCION_FUENTE.PT),
	    new CP(5, 1, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.PT),
	    new CP(0, 0, OPCION_FUENTE.FIN)

    };
    protected static CP[] Cdata = {
	    new CP(5, 1, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.PT),
	    new CP(1, 0, OPCION_FUENTE.PT),
	    new CP(0, 1, OPCION_FUENTE.PT),
	    new CP(0, 9, OPCION_FUENTE.PT),
	    new CP(1, 10, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.FIN)

    };
    protected static CP[] Ddata = {
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.PT),
	    new CP(5, 1, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.PT),
	    new CP(0, 0, OPCION_FUENTE.FIN)

    };
    protected static CP[] Edata = {
	    new CP(5, 0, OPCION_FUENTE.PT),
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(5, 10, OPCION_FUENTE.STROKE),
	    new CP(0, 5, OPCION_FUENTE.PT),
	    new CP(4, 5, OPCION_FUENTE.FIN)

    };
    // Protected Shared edata() as CP= {
    //    {5, 1, PT}, {4, 0, PT}, {1, 0, PT}, {0, 1, PT}, {0, 6, PT}, {1, 7, PT},
    //    {4, 7, PT}, {5, 6, PT}, {5, 4, PT}, {0, 4, END}
    //};

    protected static CP[] Fdata = {
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(5, 10, OPCION_FUENTE.STROKE),
	    new CP(0, 5, OPCION_FUENTE.PT),
	    new CP(4, 5, OPCION_FUENTE.FIN)

    };
    protected static CP[] Gdata = {
	    new CP(3, 5, OPCION_FUENTE.PT),
	    new CP(5, 5, OPCION_FUENTE.PT),
	    new CP(5, 1, OPCION_FUENTE.PT),
	    new CP(3, 0, OPCION_FUENTE.PT),
	    new CP(1, 0, OPCION_FUENTE.PT),
	    new CP(0, 1, OPCION_FUENTE.PT),
	    new CP(0, 9, OPCION_FUENTE.PT),
	    new CP(1, 10, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.PT),
	    new CP(5, 7, OPCION_FUENTE.STROKE),
	    new CP(5, 5, OPCION_FUENTE.PT),
	    new CP(5, -1, OPCION_FUENTE.FIN)

    };
    protected static CP[] Hdata = {
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(0, 10, OPCION_FUENTE.STROKE),
	    new CP(5, 0, OPCION_FUENTE.PT),
	    new CP(5, 10, OPCION_FUENTE.STROKE),
	    new CP(0, 5, OPCION_FUENTE.PT),
	    new CP(5, 5, OPCION_FUENTE.FIN)

    };
    protected static CP[] Idata = {
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.STROKE),
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.STROKE),
	    new CP(2, 0, OPCION_FUENTE.PT),
	    new CP(2, 10, OPCION_FUENTE.FIN)

    };
    protected static CP[] Jdata = {
	    new CP(2, 10, OPCION_FUENTE.PT),
	    new CP(6, 10, OPCION_FUENTE.STROKE),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(4, 1, OPCION_FUENTE.PT),
	    new CP(3, 0, OPCION_FUENTE.PT),
	    new CP(1, 0, OPCION_FUENTE.PT),
	    new CP(0, 1, OPCION_FUENTE.PT),
	    new CP(0, 4, OPCION_FUENTE.FIN)

    };
    protected static CP[] Kdata = {
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(0, 10, OPCION_FUENTE.STROKE),
	    new CP(5, 0, OPCION_FUENTE.PT),
	    new CP(0, 5, OPCION_FUENTE.PT),
	    new CP(5, 10, OPCION_FUENTE.FIN)

    };
    protected static CP[] Ldata = {
	    new CP(5, 0, OPCION_FUENTE.PT),
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(0, 10, OPCION_FUENTE.FIN)

    };
    protected static CP[] Mdata = {
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(3, 6, OPCION_FUENTE.PT),
	    new CP(6, 10, OPCION_FUENTE.PT),
	    new CP(6, 0, OPCION_FUENTE.FIN)

    };
    protected static CP[] Ndata = {
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(5, 0, OPCION_FUENTE.PT),
	    new CP(5, 10, OPCION_FUENTE.FIN)

    };
    protected static CP[] Odata = {
	    new CP(0, 1, OPCION_FUENTE.PT),
	    new CP(1, 0, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.PT),
	    new CP(5, 1, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(1, 10, OPCION_FUENTE.PT),
	    new CP(0, 9, OPCION_FUENTE.PT),
	    new CP(0, 1, OPCION_FUENTE.FIN)

    };
    protected static CP[] Pdata = {
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.PT),
	    new CP(5, 6, OPCION_FUENTE.PT),
	    new CP(4, 5, OPCION_FUENTE.PT),
	    new CP(0, 5, OPCION_FUENTE.FIN)

    };
    protected static CP[] Qdata = {
	    new CP(0, 1, OPCION_FUENTE.PT),
	    new CP(1, 0, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.PT),
	    new CP(5, 1, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(1, 10, OPCION_FUENTE.PT),
	    new CP(0, 9, OPCION_FUENTE.PT),
	    new CP(0, 1, OPCION_FUENTE.STROKE),
	    new CP(0, 1, OPCION_FUENTE.PT),
	    new CP(2, 2, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.PT),
	    new CP(5, -2, OPCION_FUENTE.FIN)

    };
    protected static CP[] Rdata = {
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.PT),
	    new CP(5, 6, OPCION_FUENTE.PT),
	    new CP(4, 5, OPCION_FUENTE.PT),
	    new CP(0, 5, OPCION_FUENTE.STROKE),
	    new CP(3, 5, OPCION_FUENTE.PT),
	    new CP(5, 0, OPCION_FUENTE.FIN)

    };
    protected static CP[] Sdata = {
	    new CP(0, 1, OPCION_FUENTE.PT),
	    new CP(1, 0, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.PT),
	    new CP(5, 1, OPCION_FUENTE.PT),
	    new CP(5, 4, OPCION_FUENTE.PT),
	    new CP(4, 5, OPCION_FUENTE.PT),
	    new CP(1, 5, OPCION_FUENTE.PT),
	    new CP(0, 6, OPCION_FUENTE.PT),
	    new CP(0, 9, OPCION_FUENTE.PT),
	    new CP(1, 10, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.FIN)

    };
    protected static CP[] Tdata = {
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(6, 10, OPCION_FUENTE.STROKE),
	    new CP(3, 0, OPCION_FUENTE.PT),
	    new CP(3, 10, OPCION_FUENTE.FIN)

    };
    protected static CP[] Udata = {
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(0, 1, OPCION_FUENTE.PT),
	    new CP(1, 0, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.PT),
	    new CP(5, 1, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.PT),
	    new CP(5, 10, OPCION_FUENTE.FIN)

    };
    protected static CP[] Vdata = {
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(3, 0, OPCION_FUENTE.PT),
	    new CP(6, 10, OPCION_FUENTE.FIN)

    };
    protected static CP[] Wdata = {
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(3, 4, OPCION_FUENTE.PT),
	    new CP(6, 0, OPCION_FUENTE.PT),
	    new CP(6, 10, OPCION_FUENTE.FIN)

    };
    protected static CP[] Xdata = {
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(5, 0, OPCION_FUENTE.STROKE),
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(6, 10, OPCION_FUENTE.FIN)

    };
    protected static CP[] Ydata = {
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(3, 5, OPCION_FUENTE.PT),
	    new CP(6, 10, OPCION_FUENTE.STROKE),
	    new CP(3, 5, OPCION_FUENTE.PT),
	    new CP(3, 0, OPCION_FUENTE.FIN)

    };
    protected static CP[] Zdata = {
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(5, 10, OPCION_FUENTE.PT),
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(5, 0, OPCION_FUENTE.FIN)

    };
    protected static CP[] ndata1 = {
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.STROKE),
	    new CP(0, 7, OPCION_FUENTE.PT),
	    new CP(2, 10, OPCION_FUENTE.STROKE),
	    new CP(2, 0, OPCION_FUENTE.PT),
	    new CP(2, 10, OPCION_FUENTE.FIN)

    };
    protected static CP[] onedata = {
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.STROKE),
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.STROKE),
	    new CP(2, 0, OPCION_FUENTE.PT),
	    new CP(2, 10, OPCION_FUENTE.FIN)

    };
    protected static CP[] ndata2 = {
	    new CP(0, 9, OPCION_FUENTE.PT),
	    new CP(1, 10, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.PT),
	    new CP(5, 6, OPCION_FUENTE.PT),
	    new CP(4, 5, OPCION_FUENTE.PT),
	    new CP(0, 0, OPCION_FUENTE.PT),
	    new CP(6, 0, OPCION_FUENTE.FIN)

    };
    protected static CP[] ndata3 = {
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(5, 10, OPCION_FUENTE.PT),
	    new CP(2, 6, OPCION_FUENTE.PT),
	    new CP(4, 6, OPCION_FUENTE.PT),
	    new CP(5, 5, OPCION_FUENTE.PT),
	    new CP(5, 1, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.PT),
	    new CP(1, 0, OPCION_FUENTE.PT),
	    new CP(0, 1, OPCION_FUENTE.FIN)

    };
    protected static CP[] ndata4 = {
	    new CP(4, 0, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(0, 3, OPCION_FUENTE.PT),
	    new CP(6, 3, OPCION_FUENTE.FIN)

    };
    protected static CP[] ndata5 = {
	    new CP(5, 10, OPCION_FUENTE.PT),
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(0, 6, OPCION_FUENTE.PT),
	    new CP(1, 7, OPCION_FUENTE.PT),
	    new CP(4, 7, OPCION_FUENTE.PT),
	    new CP(5, 6, OPCION_FUENTE.PT),
	    new CP(5, 1, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.PT),
	    new CP(1, 0, OPCION_FUENTE.PT),
	    new CP(0, 1, OPCION_FUENTE.FIN)

    };
    protected static CP[] ndata6 = {
	    new CP(0, 4, OPCION_FUENTE.PT),
	    new CP(1, 5, OPCION_FUENTE.PT),
	    new CP(4, 5, OPCION_FUENTE.PT),
	    new CP(5, 4, OPCION_FUENTE.PT),
	    new CP(5, 1, OPCION_FUENTE.PT),
	    new CP(3, 0, OPCION_FUENTE.PT),
	    new CP(1, 0, OPCION_FUENTE.PT),
	    new CP(0, 1, OPCION_FUENTE.PT),
	    new CP(0, 9, OPCION_FUENTE.PT),
	    new CP(1, 10, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.PT),
	    new CP(5, 7, OPCION_FUENTE.FIN)

    };
    protected static CP[] ndata7 = {
	    new CP(0, 9, OPCION_FUENTE.PT),
	    new CP(0, 10, OPCION_FUENTE.PT),
	    new CP(5, 10, OPCION_FUENTE.PT),
	    new CP(3, 5, OPCION_FUENTE.PT),
	    new CP(3, 0, OPCION_FUENTE.FIN)

    };
    protected static CP[] ndata8 = {
	    new CP(0, 1, OPCION_FUENTE.PT),
	    new CP(1, 0, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.PT),
	    new CP(5, 1, OPCION_FUENTE.PT),
	    new CP(5, 3, OPCION_FUENTE.PT),
	    new CP(1, 6, OPCION_FUENTE.PT),
	    new CP(0, 8, OPCION_FUENTE.PT),
	    new CP(0, 9, OPCION_FUENTE.PT),
	    new CP(1, 10, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.PT),
	    new CP(5, 7, OPCION_FUENTE.PT),
	    new CP(1, 4, OPCION_FUENTE.PT),
	    new CP(0, 3, OPCION_FUENTE.PT),
	    new CP(0, 1, OPCION_FUENTE.FIN)

    };
    protected static CP[] ndata9 = {
	    new CP(0, 1, OPCION_FUENTE.PT),
	    new CP(1, 0, OPCION_FUENTE.PT),
	    new CP(3, 0, OPCION_FUENTE.PT),
	    new CP(5, 2, OPCION_FUENTE.PT),
	    new CP(5, 9, OPCION_FUENTE.PT),
	    new CP(4, 10, OPCION_FUENTE.PT),
	    new CP(1, 10, OPCION_FUENTE.PT),
	    new CP(0, 9, OPCION_FUENTE.PT),
	    new CP(0, 6, OPCION_FUENTE.PT),
	    new CP(1, 5, OPCION_FUENTE.PT),
	    new CP(3, 5, OPCION_FUENTE.PT),
	    new CP(5, 6, OPCION_FUENTE.FIN)

    };
    protected static CP[] ndata0 = {
	    new CP(0, 2, OPCION_FUENTE.PT),
	    new CP(3, 0, OPCION_FUENTE.PT),
	    new CP(6, 2, OPCION_FUENTE.PT),
	    new CP(6, 8, OPCION_FUENTE.PT),
	    new CP(3, 10, OPCION_FUENTE.PT),
	    new CP(0, 8, OPCION_FUENTE.PT),
	    new CP(0, 2, OPCION_FUENTE.FIN)

    };
    protected static CP[] ndataplus = {
	    new CP(3, 2, OPCION_FUENTE.PT),
	    new CP(3, 8, OPCION_FUENTE.STROKE),
	    new CP(1, 5, OPCION_FUENTE.PT),
	    new CP(6, 5, OPCION_FUENTE.FIN)

    };
    protected static CP[] ndataminus = {
	    new CP(1, 5, OPCION_FUENTE.PT),
	    new CP(5, 5, OPCION_FUENTE.FIN)

    };
    protected static CP[] ndatadot = {
	    new CP(3, 1, OPCION_FUENTE.PT),
	    new CP(4, 1, OPCION_FUENTE.PT),
	    new CP(4, 0, OPCION_FUENTE.PT),
	    new CP(3, 0, OPCION_FUENTE.PT),
	    new CP(3, 1, OPCION_FUENTE.FIN)

    };


    protected static void dibujarLetra(CP[] pCaracter)
    {
        GL.Begin(BeginMode.LineStrip);
        foreach (CP objCP in pCaracter)
        {
            switch ((objCP.tipo))
            {
                case OPCION_FUENTE.PT:
                    GL.Vertex2(objCP.x, objCP.y);
                    break; // TODO: might not be correct. Was : Exit Select
                case OPCION_FUENTE.STROKE:
                    GL.Vertex2(objCP.x, objCP.y);
                    GL.End();
                    GL.Begin(BeginMode.LineStrip);
                    break; // TODO: might not be correct. Was : Exit Select
                case OPCION_FUENTE.FIN:
                    GL.Vertex2(objCP.x, objCP.y);
                    GL.End();
                    GL.Translate(8f, 0f, 0f);
                    break; // TODO: might not be correct. Was : Exit Select
            }
        }
    }


    static int @base = -1;
    public static void inicializarTextos()
    {
        if (@base > 0)
        {
            GL.DeleteLists(@base, 128);
        }
        GL.ShadeModel(ShadingModel.Flat);
        @base = GL.GenLists(128);
        GL.ListBase(@base);
        GL.NewList(@base + Convert.ToInt32('A'), ListMode.Compile);
        dibujarLetra(Adata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('B'), ListMode.Compile);
        dibujarLetra(Bdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('C'), ListMode.Compile);
        dibujarLetra(Cdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('D'),ListMode.Compile );
        dibujarLetra(Ddata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('E'), ListMode.Compile);
        dibujarLetra(Edata);
        GL.EndList();

        //GL.NewList(base + AscW("e"), ListMode.Compile)
        //dibujarLetra(Edata)
        //GL.EndList()

        GL.NewList(@base + Convert.ToInt32('F'), ListMode.Compile);
        dibujarLetra(Fdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('G'), ListMode.Compile);
        dibujarLetra(Gdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('H'), ListMode.Compile);
        dibujarLetra(Hdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('I'), ListMode.Compile);
        dibujarLetra(Idata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('J'), ListMode.Compile);
        dibujarLetra(Jdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('K'), ListMode.Compile);
        dibujarLetra(Kdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('L'), ListMode.Compile);
        dibujarLetra(Ldata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('M'), ListMode.Compile);
        dibujarLetra(Mdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('N'), ListMode.Compile);
        dibujarLetra(Ndata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('O'), ListMode.Compile);
        dibujarLetra(Odata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('P'), ListMode.Compile);
        dibujarLetra(Pdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('Q'), ListMode.Compile);
        dibujarLetra(Qdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('R'), ListMode.Compile);
        dibujarLetra(Rdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('S'), ListMode.Compile);
        dibujarLetra(Sdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('T'), ListMode.Compile);
        dibujarLetra(Tdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('U'), ListMode.Compile);
        dibujarLetra(Udata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('V'), ListMode.Compile);
        dibujarLetra(Vdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('W'), ListMode.Compile);
        dibujarLetra(Wdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('X'), ListMode.Compile);
        dibujarLetra(Xdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('Y'), ListMode.Compile);
        dibujarLetra(Ydata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('Z'), ListMode.Compile);
        dibujarLetra(Zdata);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('1'), ListMode.Compile);
        dibujarLetra(ndata1);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('2'), ListMode.Compile);
        dibujarLetra(ndata2);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('3'), ListMode.Compile);
        dibujarLetra(ndata3);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('4'), ListMode.Compile);
        dibujarLetra(ndata4);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('5'), ListMode.Compile);
        dibujarLetra(ndata5);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('6'), ListMode.Compile);
        dibujarLetra(ndata6);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('7'), ListMode.Compile);
        dibujarLetra(ndata7);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('8'), ListMode.Compile);
        dibujarLetra(ndata8);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('9'), ListMode.Compile);
        dibujarLetra(ndata9);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('0'), ListMode.Compile);
        dibujarLetra(ndata0);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('+'), ListMode.Compile);
        dibujarLetra(ndataplus);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('-'), ListMode.Compile);
        dibujarLetra(ndataminus);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32('.'), ListMode.Compile);
        dibujarLetra(ndatadot);
        GL.EndList();

        GL.NewList(@base + Convert.ToInt32(' '), ListMode.Compile);
        GL.Translate(8.0, 0.0, 0.0);
        GL.EndList();

    }

    private string _strCadena;
    public string Cadena
    {
        get { return _strCadena; }
        set { _strCadena = value.ToUpper(); }
    }


    private bool _visible;
    public bool Visible
    {
        get { return _visible; }
        set { _visible = value; }
    }


    private Colores _coloreado;
    public Colores Coloreado
    {
        get { return _coloreado; }
        set { _coloreado = value; }
    }

    private Capa _capa = null;
    public Capa CapaCanvas
    {
        get { return _capa; }
        set { _capa = value; }
    }

    private ushort _rotacion;
    public ushort Rotacion
    {
        get { return this._rotacion; }
        set { this._rotacion = value; }
    }


    private int _largo;
    public int Largo
    {
        //If (Me.CapaCanvas Is Nothing) Then
        //Else
        //Return Me.CapaCanvas.Largo
        //End If
        get { return this._largo; }
        set { this._largo = value; }
    }

    private int _alto;
    public int Alto
    {
        //If (Me.CapaCanvas Is Nothing) Then
        //Else
        //    Return Me.CapaCanvas.Alto
        //End If
        get { return this._alto; }
        set { this._alto = value; }
    }

    private int _Grosor;
    public int Grosor
    {
        get { return this._Grosor; }
        set { this._Grosor = value; }
    }


    private Coordenada _localizacion;
    public Coordenada Localizacion
    {
        get { return _localizacion; }
        set { _localizacion = value; }
    }

    private string _id;
    public string ID
    {
        get { return _id; }
        set { _id = value; }
    }

    public FuenteStroke(string PId, Coordenada pLocalizacion, int intLargo, int intAlto)
    {
        this.ID = PId;
        this.Localizacion = pLocalizacion;
        this.Largo = intLargo;
        this.Alto = intAlto;
    }




    public void _pintar()
    {
        //Si no hay texto sale
        if ((this.Cadena == null || this.Cadena.Length == 0 || this.Visible == false))
        {
            return;
        }
        int len = this.Cadena.Length;
        System.Text.ASCIIEncoding objCodificador = new System.Text.ASCIIEncoding();
        byte[] bytes = objCodificador.GetBytes(this.Cadena.ToCharArray());
        GL.PushMatrix();
        GL.Translate(this.Localizacion.X, this.Localizacion.Y, this.Localizacion.Z);
        if (((this.CapaCanvas == null) || (this.CapaCanvas.Coloreado == null)))
        {
            GL.Color3(this.Coloreado.Rojo, this.Coloreado.Verde, this.Coloreado.Azul);
        }
        if ((this.Grosor > 0))
        {
            GL.LineWidth(this.Grosor);
        }
        if ((this.Largo > 0f || this.Alto > 0f))
        {
            GL.Scale(this.Largo * 0.1f, this.Alto * 0.1f, 0f);
        }
        //GL.Rotate(180f, 1f, 0f, 0f);
        if ((this.Rotacion > 0))
        {
            GL.Rotate(this.Rotacion, 0f, 0f, 1f);
        }
        GL.ListBase(@base);
        GL.CallLists(len, ListNameType.UnsignedByte, bytes);
        GL.PopMatrix();
    }
}

